#include<iostream>
#include<unistd.h>
#include<signal.h>
#include <sys/types.h>
#include<cerrno>
#include<cstring>
#include<string>

//系统错误的信号---SIGFPE ---8号信号 
// void handler(int sig)
// {
//     std::cout<<sig<<"号信号"<<std::endl;
// }
// int main()
// {
//     signal(SIGFPE,handler);
//     signal(SIGSEGV,handler);
//     while(true)
//     {
//         std::cout<<"hello!,my pid = "<<getpid()<<std::endl;
//         //8号信号
//         // int a = 10; 
//         // a/=0;
//         //段错误---11号信号--SIGSEGV
//         int* ptr = nullptr;
//         *ptr = 10;
//     }
//     return 0;
//}
//设置闹钟
// int cnt = 0;
// void handler(int sig)
// {
//     std::cout<<"cnt: "<<cnt<<std::endl;
//     exit(1);
// }
// int main()
// {
//     signal(SIGALRM,handler);
//     alarm(1);//设置闹钟---1s---
//     while(true)
//     {
//         ++cnt;
//     }
//     return 0;
// }
//模拟实现kill
//./kill -2 pid 
// void my_Kill(pid_t pid,int sig)
// {
//     std::cout<<"对pid为"<<pid<<"的进程发送"<<sig<<"号信号"<<std::endl;
//     int n = kill(pid,sig);
//     if( n < 0)
//     {
//         perror("kill");
//         return;
//     }
// }
// void SendSemaphore(int argc,char*argv[])
// {
//     if(argc != 3)
//     {
//         std::cerr<<"Usage: ./name -nums pid"<<std::endl;
//         return;
//     }
//     int sig = *(++argv[1]) - '0';
//     pid_t pid = std::stoi(std::string(argv[2]));
//     my_Kill(pid,sig);
// }
// int main(int argc,char*argv[])
// {
//     SendSemaphore(argc,argv);
//     return 0;
// }

//系统调用---signal---
/*void handler(int sig)
{
    std::cout<<"sig: "<<sig<<std::endl;
}
int main()
{
    signal(2,handler);
    signal(3,handler);
    signal(4,handler);
    while(true)
    {
        std::cout<<"hello word,pid = "<<getpid()<<std::endl;
        sleep(1);
    }
    return 0;
}*/